/*
 * @Author: 严晗 823841034@qq.com
 * @Date: 2023-10-11 17:46:29
 * @LastEditors: 严晗 823841034@qq.com
 * @LastEditTime: 2023-11-06 10:56:17
 * @FilePath: /yike-admin/Users/yanhan/vite-project/src/store/index.js
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
import { login, getUserInfo, getMenus, logout, updatePassword } from '~/api/user'
import { setToken, removeToken } from '~/composables/auth'

const auth = {
	state: {
		user: {}, // 用户信息
		menuWidth: '250px', // 侧边菜单栏宽度，默认250px，收起64px
		menus: [], // 登录用户返回的菜单
	},
	mutations: {
		// 设置用户信息
		SET_USERINFO(state, user) {
			state.user = user
		},
		// 设置侧边菜单栏宽度
		SET_MENU_WIDTH(state) {
			state.menuWidth = state.menuWidth == '250px' ? '64px' : '250px'
		},
		// 设置侧边菜单栏数据
		SET_MENUS(state, menus) {
			state.menus = menus
		},
	},
	actions: {
		// 登录
		login({ commit }, { name, password }) {
			return new Promise((resolve, reject) => {
				login(name, password)
					.then((res) => {
						// 存储token
						setToken(res.data.access_token)
						resolve(res.data)
					})
					.catch((err) => reject(err))
			})
		},
		// 退出登录
		logout({ commit }) {
			return new Promise((resolve, reject) => {
				logout()
					.then((res) => {
						// 删除token
						removeToken()

						// 删除用户信息
						commit('SET_USERINFO', {})
						resolve(res.data)
					})
					.catch((err) => reject(err))
			})
		},
		// 获取用户信息
		getUserInfo({ commit }) {
			return new Promise((resolve, reject) => {
				getUserInfo()
					.then((res) => {
						commit('SET_USERINFO', res.data.data)
						resolve(res.data.data)
					})
					.catch((err) => reject(err))
			})
		},
		// 获取侧边菜单路由信息
		getMenus({ commit }) {
			return new Promise((resolve, reject) => {
				getMenus()
					.then((res) => {
						commit('SET_MENUS', res.data.data)
						resolve(res.data.data)
					})
					.catch((err) => reject(err))
			})
		},
		// 修改密码
		updatePassword({ commit }, data) {
			return new Promise((resolve, reject) => {
				updatePassword(data)
					.then((res) => {
						// 删除token
						removeToken()

						// 删除用户信息
						commit('SET_USERINFO', {})
						resolve(res.data)
					})
					.catch((err) => reject(err))
			})
		},
	},
}

export default auth
